package edu.lnu.ums.entities.dictionaries;

import edu.lnu.ums.entities.*;
import javax.persistence.Column;
import javax.persistence.Entity;

import edu.lnu.ums.entities.core.AbstractEntity;
import edu.lnu.ums.entities.core.LinkToAnotherDB;
import edu.lnu.ums.entities.core.UMSObject;
import java.util.ArrayList;
import java.util.List;

@Entity
public class UMSType extends AbstractEntity {
    private static final long serialVersionUID = 1L;
    
    public UMSType() {
        super();
    }
    
    public UMSType(String userClassName, String javaClassName) {
        super();
        this.javaClassName = javaClassName;
        this.userClassName = userClassName;
    }

    @Column
    private String javaClassName;
    
    @Column
    private String userClassName;

    public String getJavaClassName() {
        return javaClassName;
    }

    public void setJavaClassName(String javaClassName) {
        this.javaClassName = javaClassName;
    }

    public String getUserClassName() {
        return userClassName;
    }

    public void setUserClassName(String userClassName) {
        this.userClassName = userClassName;
    }
    
    public Class<?> getUMSClass() {
        try {
            return Class.forName(javaClassName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            throw new RuntimeException("javaClassName property in UMSType class can not be null");
        }
    }

    public static List<UMSType> getUMSTypes() {
        List<UMSType> typesList = new ArrayList<UMSType>();
        typesList.add(new UMSType("Людина", Human.class.getCanonicalName()));
        typesList.add(new UMSType("Об’єкт", UMSObject.class.getCanonicalName()));
        typesList.add(new UMSType("Студент", Student.class.getCanonicalName()));
        typesList.add(new UMSType("Факультет", Faculty.class.getCanonicalName()));

        typesList.add(new UMSType("Матеріальна частина", MaterialPart.class.getCanonicalName()));
        typesList.add(new UMSType("Матеріальна цінність", MaterialValue.class.getCanonicalName()));
        typesList.add(new UMSType("Друк", Print.class.getCanonicalName()));
        typesList.add(new UMSType("Атрибутика", Attributes.class.getCanonicalName()));
        typesList.add(new UMSType("Історична цінність", HistoricalValue.class.getCanonicalName()));
        typesList.add(new UMSType("Приз", Prize.class.getCanonicalName()));
        typesList.add(new UMSType("Нагорода", Award.class.getCanonicalName()));
        typesList.add(new UMSType("Аксесуари", AccountedAccessories.class.getCanonicalName()));
        typesList.add(new UMSType("Обладнання", EducationalEquipment.class.getCanonicalName()));
        typesList.add(new UMSType("Електричний прилад", Electronic.class.getCanonicalName()));
        typesList.add(new UMSType("Комп’ютер", Computer.class.getCanonicalName()));

        typesList.add(new UMSType("Видання", Publication.class.getCanonicalName()));
        typesList.add(new UMSType("Видання університету", UniversityPublications.class.getCanonicalName()));
        typesList.add(new UMSType("Періодичне видання", Periodic.class.getCanonicalName()));
        typesList.add(new UMSType("Документ", Document.class.getCanonicalName()));

        typesList.add(new UMSType("Установа", Institution.class.getCanonicalName()));
        typesList.add(new UMSType("Організація", Organization.class.getCanonicalName()));
        typesList.add(new UMSType("Музей", Museum.class.getCanonicalName()));
        typesList.add(new UMSType("Бібліотека", Library.class.getCanonicalName()));
        typesList.add(new UMSType("Гуртожиток", Hostel.class.getCanonicalName()));
        typesList.add(new UMSType("Їдальня", Canteen.class.getCanonicalName()));
        typesList.add(new UMSType("Книгарня", Bookshop.class.getCanonicalName()));
        typesList.add(new UMSType("Видавництво", Publisher.class.getCanonicalName()));
        typesList.add(new UMSType("Сервісна організація", ServiceOrganization.class.getCanonicalName()));

        typesList.add(new UMSType("Кімната", Apartment.class.getCanonicalName()));
        typesList.add(new UMSType("Кімната для навчання", TrainingApartment.class.getCanonicalName()));
        typesList.add(new UMSType("Лабораторія", Laboratory.class.getCanonicalName()));

	typesList.add(new UMSType("Люди, що мають відношення до університету", UniversityConcernedPeople.class.getCanonicalName()));
        typesList.add(new UMSType("Пенсіонер", Pensioner.class.getCanonicalName()));
        typesList.add(new UMSType("Знаменита людина", FamousPeople.class.getCanonicalName()));
        typesList.add(new UMSType("Історична постать", HistoricalFigure.class.getCanonicalName()));
        typesList.add(new UMSType("Той, хто навчається", Studying.class.getCanonicalName()));
        typesList.add(new UMSType("Абітурієнт", Entrant.class.getCanonicalName()));
        typesList.add(new UMSType("Аспірант", Postgraduate.class.getCanonicalName()));
        typesList.add(new UMSType("Робітник", Worker.class.getCanonicalName()));
        typesList.add(new UMSType("Викладач", Teacher.class.getCanonicalName()));
        typesList.add(new UMSType("Навчання", Education.class.getCanonicalName()));

        typesList.add(new UMSType("Підрозділ", Unit.class.getCanonicalName()));
        typesList.add(new UMSType("Адміністративний підрозділ", AdministrativeUnit.class.getCanonicalName()));
        typesList.add(new UMSType("Деканат", Deanery.class.getCanonicalName()));
        typesList.add(new UMSType("Навчальний підрозділ", ScientificUnit.class.getCanonicalName()));
        typesList.add(new UMSType("Курси", TrainingCourse.class.getCanonicalName()));
        typesList.add(new UMSType("Гурток", HobbyGroup.class.getCanonicalName()));
        typesList.add(new UMSType("Група", StudentGroup.class.getCanonicalName()));
        typesList.add(new UMSType("Кафедра", Department.class.getCanonicalName()));
        typesList.add(new UMSType("Аудиторія", Audience.class.getCanonicalName()));

        typesList.add(new UMSType("Подія", Event.class.getCanonicalName()));

        typesList.add(new UMSType("Зв'язок", LinkToAnotherDB.class.getCanonicalName()));

        return typesList;
    }

}
